/*

1.字符串的读入
像5 4 6 4  这样连续带空格的数读入数组a[n]中
for(i=0;i<n;i++){
    scanf("%d",&a[i]);   这个是数组元素a[i],不是地址 
}
用scanf是因为当scanf读到空格,回车等自动结束   
    
    
2.像xigua 这种连续紧密的字符读入数组str中       
char str[100];
scanf("%s",str);   数组名相对于指针(地址) 
printf("%s",str);

    
3.函数调用问题--调用时参数值,不用写出参数的类型 
add(x,y) 就可以了   
add(int x,int y)      会造成编译错误   
但是在函数定义和声明必须点明参数类型
int add(int x,int y){
	.....
} 
如果int a[x];
函数调用数组,只用写数组名 
add(a); 正确 
add(int a[x]); 错误 
add(a[x]);  错误 


4.Do you still play 这样的数读入数组 
只能用gets() 
char str[50];
gets(str);  可以读取包含空格完整的字符串 


DO you still 
chi ji
you pay pta
用二维数组 
char str[50][20];
for(i=0;i<50;i++){
	gets(str[i]);    使用gets函数读取一行内容存入二维数组的一行 
} 

4
15
45
653 
for(i=0;i<50;i++){
	scanf("%d",&arr[i]);
} 


5.在Do you still play WZRY?判断结尾字符是否为问号
以及一行里面有没有pta字符 
char str[n][m];
for(i=0;i<n;i++){
	int len=strlen(str[i]); 
	if(str[i][len-1]=='?'){
		if(strstr(str[i],"pta")!=NULL){
			printf("yes"); 
		}
	}
}

strstr 如果找到相同的字符，则把字符第一次出现的地址返回，否则返回NULL 


6.读取字符之前,要来读取上一次scanf读入所剩下来的回车 
(1).用getchar();
(2).在读取字符时前面加一个空格" %c" 


7.strlen:读入字符串长度(包括空白字符),但是不包括字符串结束符\0 
"hello"   5
"hello world"  11
"hello\nworld"  11


8.字符串的声明问题 --字符串通常都是char类型 
(1).使用{}声明
char str[6]={'h','e','l','l','o'}; 
(2).使用""声明
char str[6]="hello"; 
(3).二维数组
char str[][5]={"ling","wocao"}; 

9.字符串--一般char类型 
做加减法时要把字符转化为数字 
a=(str[10]-'0')+10


10.#include <ctype.h>
(1).字符测试函数
isalpha--检查字母,是真否0
isdigit--检查数字,是真否0
isalnum--检查字母或者数字 
islower--检查小写字母
isupper--检查大写字母
isspace--检查空白字符(空格，制表符，换行符)
ispunct--检查标点字符(不包空格) 
(2).字符映射函数
tolower--转小写
toupper--转大写 


11.变长数组是指大小在运行中才被确定下来的,而不是在编译固定下来的 
在较老的c编译器不支持变长数组,只有在C99引用 
int str[n][m]={0};  在pta里c中会报错,但是在c++不报错 
应该
for(i=0;i<n;i++){
	for(j=0;j<m;j++){
		str[i][j]=0;
	}
}     //c中就不会报错 


12.注意gets和%s都是读入的是字符串
读入的数组必须是char类型 
可以通过for循环再转化为int类型 


13.存储字符串的arr数组大小要尽可能大
运行时错误，一般都是数组越界造成的，解决方法一般把数组大小给大点 






    
